
import java.util.ArrayList;

/*
 ********************************************************************************** 
  Classe da memória de instruções
 **********************************************************************************
 */
public class memoriaInst {
  private ArrayList<instrucao> instrucoes; //Lista de dados armazenadas da memória
  private int pc; //Contador de programa
  private int posInstrucao; //Posição de um instrução
  private int pcAntigo;  //Salva um antigo valor de PC, para o caso do jr 

  public memoriaInst() {
    instrucoes = new ArrayList();
    pc = 0;
    pcAntigo = 0;
  }
  
  public  void add(instrucao inst){
    int size = instrucoes.size();
    if (size != 0){
      for (int i=0;i<=2;i++) {
        instrucoes.add(null);
      }
    }  
    instrucoes.add(inst);
  };
  
  public String getNomeInst(){
    if(pc < instrucoes.size()){
      return instrucoes.get(pc).toString();
    }else{
      return "";
    }  
  }
  
  public instrucao getInst(){
    if (pc > instrucoes.size()){
      return null;
    }
    int oldPc = pc;
    pc += 4;
    return  (instrucao)instrucoes.get(oldPc);
  }

  public int getPc() {
    return pc;
  }
  
  public void setPc(int newValue){
    pc = newValue;
  } 
  
  public ArrayList<String> getInstNames(){
    ArrayList<String> a = new ArrayList();
    
    for(int i=0;i<instrucoes.size();i+=4){
      a.add(instrucoes.get(i).toString());  
    }
    
    return a;
    
  }
  
  

 
  
}
